package com.zh.note.demo.java8;

import java.io.PrintStream;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;

/**
 * 方法引用详解
 */
public class MethodCitationDemo {
    public static void main(String[] args) {
        /**
         * 1.引用静态方法
         *  类名::静态方法
         *  Integer::parseInt
         */
//        Comparator<Integer> comparator  = new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return Integer.compare(o1, o2);
//            }
//        };
//        Comparator<Integer> comparator = (x,y)-> Integer.compare(x,y);
        Comparator<Integer> comparator = Integer::compare;
        /**
         * 2.引用成员方法
         *  引用其他类成员方法  (其他类对象::方法名)
         *  引用本类成员方法    (this::方法名)
         *  引用父类成员方法    (super::方法名)
         */
        PrintStream out = System.out;
//        Consumer<String> consumer = (x) -> out.println(x);
        Consumer<String> consumer = out::println;
        consumer.accept("hello world");
        /**
         * 3.引用构造方法
         *  类名::new
         *  Student::new
         *
         */
        /**
         * 4.特殊()
         * 类名::成员方法
         * String::toUpperCase
         *  前提：第一个参数作为方法的调用者
         */


        List<String> strList = Arrays.asList("a", "b", "c", "d");
//        strList.stream().map(string -> string.toUpperCase()).forEach(System.out::println);
        strList.stream().map(String::toUpperCase).forEach(System.out::println);
        /**
         * 引用数组的构造方法
         *  数据类型[]::new
         *  int[]::new
         */
        List<Integer> numberList = Arrays.asList(1, 2, 3, 4, 5);
        Integer[] array = numberList.stream().toArray(Integer[]::new);
    }
}
